package com.literaryfamily.literaryfamily.service.book.msg;

import com.literaryfamily.literaryfamily.entity.BookCategory;
import com.literaryfamily.literaryfamily.entity.BookCategoryRelation;

/**
 * 书籍标签服务接口
 * 所有涉及读写的方法都需要抛出 WriteError 数据库读写错误异常(这个是运行时异常,只需要抛出不需要处理)
 * 此接口所有方法均不检查用户身份,应该验证身份后在进行检查
 *
 * @author 滑稽/因果报应
 */
public interface BookTagService {
    /**
     * 添加新的书籍标签(分类)
     *
     * @param bookCategory 要添加的书籍标签实体对象，包含标签名称等信息
     * @return 添加后的标签信息
     */
    BookCategory addBookCategory(BookCategory bookCategory);

    /**
     * 更新已有的书籍标签(分类)
     *
     * @param bookCategory 要更新的书籍标签实体对象，需包含标签ID和更新后的信息
     * @return 更新后的标签信息
     */
    BookCategory updateBookCategory(BookCategory bookCategory);

    /**
     * 删除指定的书籍标签(分类)
     *
     * @param bookCategory 要删除的书籍标签实体对象，需包含标签ID
     * @return 删除的标签信息
     */
    BookCategory deleteBookCategory(BookCategory bookCategory);

    /**
     * 根据ID获取书籍标签(分类)详情
     *
     * @param id 要查询的标签ID
     * @return 查询到的标签信息
     */
    BookCategory getBookCategory(Long id);

    /**
     * 为指定书籍添加标签关联
     *
     * @param tagId  要关联的标签ID
     * @param bookId 要关联的书籍ID
     * @return 创建的关联关系信息
     */
    BookCategoryRelation addTagToBook(Long tagId, Long bookId);

    /**
     * 解除指定书籍和标签的关联关系
     *
     * @param tagId  要解除关联的标签ID
     * @param bookId 要解除关联的书籍ID
     * @return 删除的关联关系信息
     */
    BookCategoryRelation RemoveBookLabels(Long tagId, Long bookId);

    /**
     * 根据关联关系ID删除书籍和标签的关联
     *
     * @param id 书籍-标签关联关系的ID
     * @return 删除的关联关系信息
     */
    BookCategoryRelation RemoveBookLabels(Long id);
}